<!--
  Copyright JS Foundation and other contributors, http://js.foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<script type="text/html" data-help-name="function">
  <p>
    Исполняет JavaScript функцию (введенную в настройках, во вкладке <b>Функция</b>) для всех получаемых узлом сообщений.
  </p>
  <p>
    Сообщения передаются в виде объекта JavaScript с именем <code>msg</code>.
  </p>
  <p>
    Обычно у объекта есть свойство <code>msg.payload</code>, содержащее тело сообщения.
  </p>
  <p>
    Ожидается, что функция вернет объект сообщения (или несколько объектов сообщения), которые будут отправлены следующим узлам в потоке, но может также ничего не возвращать, чтобы остановить поток.
  </p>
  <p>
    Код настройки, выполняемый один раз при запуске сервера или при развертывании новой конфигурации потока, можно ввести во вкладке <b>Настройка</b>. Также во вкладке <b>Закрытие</b> можно ввести код очистки, выполняемый при остановке или повторном развертывании узла.
  </p>
  <p>
    Если код настройки возвращает Promise объект, тогда обработка входящих сообщений узлом начнется после его завершения.
  </p>

  <h3>Подробности</h3>
  <p>
    Смотрите <a target="_blank" href="https://nodered.org/docs/writing-functions.html">онлайн-документацию</a> для получения дополнительной информации по написанию функций.
  </p>

  <h4>Отправка сообщений</h4>
  <p>
    Функция может либо вернуть сообщения, которые она хочет передать следующим узлам в потоке, либо вызвать <code>node.send(сообщения)</code>.
  </p>
  <p>
    Она может вернуть/отправить:
  </p>
  <ul>
    <li>один объект сообщения - передается узлам, подключенным к первому порту выхода</li>
    <li>массив объектов сообщений - передается на узлы, подключенные к соответствующим портам выхода</li>
  </ul>
  <p>
    Примечание: код настройки выполняется во время инициализации узлов. Таким образом, если на вкладке настройки кода вызывается <code>node.send</code>, последующие узлы могут не получить это сообщение.
  </p>
  <p>
    Если какой-либо элемент массива сам является массивом сообщений, тогда на соответствующий выход отправляется несколько сообщений.
  </p>
  <p>
    Если возвращен null, либо сам по себе, либо как элемент массива, тогда сообщение не передается.
  </p>

  <h4>Ведение журнала и обработка ошибок</h4>
  <p>
    Для добавления информации в журнал или сообщения об ошибке доступны следующие функции:
  </p>
  <ul>
    <li><code>node.log("Сообщение для журнала")</code></li>
    <li><code>node.warn("Предупреждение")</code></li>
    <li><code>node.error("Ошибка")</code></li>
  </ul>
  <p>
    Также узел Catch может использоваться для обработки ошибок. Чтобы можно было ловить оповещения об ошибке, при вызове <code>node.error</code> передайте <code>msg</code> в качестве второго аргумента:
  </p>
  <pre>node.error("Ошибка", msg);</pre>

  <h4>Доступ к информации об узле</h4>
  <p>
    В функции можно обращаться к идентификатору и имени узла, используя следующие свойства:
  </p>
  <ul>
    <li><code>node.id</code> - идентификатор узла</li>
    <li><code>node.name</code> - имя узла</li>
  </ul>

  <h4>Использование переменных среды</h4>
  <p>
    Доступ к переменным среды можно получить с помощью <code>env.get("MY_ENV_VAR")</code>.
  </p>
</script>
